数据包分发策略。可以选择7
种类型,默认为2
- 1,轮循模式,收到会轮循分配给每一个
Worker
进程 - 2,固定模式,根据连接的文件描述符分配
Worker
。这样可以保证同一个连接发来的数据只会被同一个Worker
处理 - 3,抢占模式,主进程会根据
Worker
的忙闲状态选择投递,只会投递给处于闲置状态的Worker
- 4,IP分配,根据客户端
IP
进行取模hash
,分配给一个固定的Worker
进程。可以保证同一个来源IP的连接数据总会被分配到同一个Worker
进程。算法为ip2long(ClientIP) % worker_num
- 5,
UID
分配,需要用户代码中调用 Server->bind() 将一个连接绑定1
个uid
。然后底层根据UID
的值分配到不同的Worker
进程。算法为UID % worker_num
,如果需要使用字符串作为UID,可以使用crc32(UID_STRING)
- 7,
stream
模式,空闲的Worker
会accept
连接,并接受Reactor
的新请求
- 无状态
Server
可以使用1
或3
,同步阻塞Server
使用3
,异步非阻塞Server
使用1
- 有状态使用
2
、4
、5
dispatch_mode 4,5
两种模式,在1.7.8
以上版本可用
dispatch_mode=1/3
时,底层会屏蔽onConnect
/onClose
事件,原因是这2种模式下无法保证onConnect
/onClose
/onReceive
的顺序
非请求响应式的服务器程序,请不要使用模式1或3
dispatch_mode=2/4/5
时为固定分配,底层使用客户端IP取模散列到不同的Worker
进程,算法为ip2long(ClientIP) % worker_num
dispatch_mode=1/3
时随机分配到不同的Worker
进程
dispatch_mode
配置在BASE
模式是无效的,因为BASE
不存在投递任务,当Reactor线程
收到客户端发来的数据后会立即在当前线程/进程回调onReceive
,不需要投递Worker
进程。